package com.dy.design_pattern_study.singleton_pattern.dome2;

import com.dy.design_pattern_study.singleton_pattern.dome1.Singleton;

/**
 * @CreateBy zhangdingyi
 * @Date 2023-04-17
 * @Content 单例模式 -饿汉式
 * 这种静态初始化的方式是在自己被加载时就将自己实例化，所以被形象地称之为饿汉式单例类，
 * 原先的单例模式处理方式是要在第一次被引用时，才会将自己实例化，所以就被称为懒汉式单例类
 */
public class StaticSingleton {

    /*
        单例模式试图解决的两个问题：
        1.全局访问
        2.实例化控制

        公共静态属性为访问实例提供了一个全局访问点
     */
    private static StaticSingleton instance;

    //静态赋值，仅赋值一次，系统创建该对象的时候就进行赋值
    static {
        //‘静态初始化’方法，这种方法不需要开发人员显式地编写线程安全代码，
        // 即可解决多线程环境下它是不安全的问题
        instance = new StaticSingleton();
    }

    //1.不能让外部创建对象的实例
    private StaticSingleton() {
    }

    /**
     * 单例模式因为Singleton类封装它的唯一实例，这样它可以严格地控制客户怎样访问它以及何时访问它。
     * 简单地说就是对唯一实例的受控访问
     * @return
     */
    //2.公开一个方法让其他对象可以访问
    public static StaticSingleton getInstance() {
        //后面用户访问，就直接拿对应的单例即可，不用考虑到多线程的影响
        return instance;
    }
}
